package com.niocholas.study.designpatterns.chainofresponsibility;

import com.niocholas.study.designpatterns.chainofresponsibility.normal.NormalHandlerA;
import com.niocholas.study.designpatterns.chainofresponsibility.normal.NormalHandlerB;
import com.niocholas.study.designpatterns.chainofresponsibility.normal.NormalHandlerChain;
import com.niocholas.study.designpatterns.chainofresponsibility.variant.VariantHandlerA;
import com.niocholas.study.designpatterns.chainofresponsibility.variant.VariantHandlerB;
import com.niocholas.study.designpatterns.chainofresponsibility.variant.VariantHandlerChain;

/**
 * 职责链模式
 *
 * 将请求的发送和接收解耦，让多个接收对象都有机会处理这个请求。
 * 将这些接收对象串成一条链，并沿着这条链传递这个请求，
 * 直到链上的某个接收对象能够处理它为止。
 *
 * tips : 如果处理器链上的某个处理器能够处理这个请求，那就不会继续往下传递请求。
 * tips : 变体:请求会被所有的处理器都处理一遍，不存在中途终止的情况。
 */
public class ChainOfResponsibilityApplication {

    public static void main(String[] args) {
        NormalHandlerChain chain = new NormalHandlerChain();
        chain.addHandler(new NormalHandlerA());
        chain.addHandler(new NormalHandlerB());
        chain.handle();
        //变体:请求会被所有的处理器都处理一遍，不存在中途终止的情况。
        VariantHandlerChain variantHandlerChain= new VariantHandlerChain();
        variantHandlerChain.addHandler(new VariantHandlerA());
        variantHandlerChain.addHandler(new VariantHandlerB());
        variantHandlerChain.handle();
    }

}
